﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using ModeloMagiPack.Entidades;
using BLLMagiPack.Managers;

namespace MaGiPack.Movimientos
{
    public partial class FrmCheque : Form
    {
        private bool _esAlta;
        private List<ChequeObservacion> _observaciones;
        private Cheque _cheque;

        public FrmCheque()
            : this(new Cheque())
        {
            _esAlta = true;
            Text = "Nuevo cheque";
            _observaciones = new List<ChequeObservacion>();
        }

        public FrmCheque(Cheque cheque)
        {
            InitializeComponent();
            _esAlta = false;
            _cheque = cheque;//Lo pongo acá para hacerlo en orden en el LOAD porque sino se coge a si mismo.
            Text = "Modificando cheque";
            _observaciones = new BLLChequeObservacion().TraerObservacionesPorCheque(cheque.IdCheque);
        }

        private bool ValidarDatos()
        {
            bool estaOK = true;
            Utilidades.LimpiarErrores(this, errorCheques);
            estaOK = Utilidades.ValidarDatos(this, errorCheques);

            return estaOK;
        }

        private void CargarLocalidades()
        {
            List<Localidad> localidades = new BLLLocalidad().TraerLocalidades().OrderBy(l => l.Nombre).ToList();
            localidades.Insert(0, new Localidad() { IdLocalidad = 0, Nombre = "< Seleccione una Localidad >" });
            bsLocalidad.DataSource = localidades;
        }

        private void CargarCuentasBancarias()
        {
            bsCuentasBancarias.DataSource = new BLLCuentaBancaria().TraerCuentas();
        }

        private void CargarEstados()
        {
            foreach (string item in Enum.GetNames(typeof(ChequeEstado)))
                cboEstados.Items.Add(item);

            cboEstados.SelectedIndex = 0;
        }

        private void CargarObservaciones()
        {
            bsChequeObservacion.DataSource = new List<ChequeObservacion>();
            bsChequeObservacion.DataSource = _observaciones;
        }

        private void CargarDatosCheque()
        {
            txtNro.Text = _cheque.Numero;
            dtpFechaEmision.Value = _cheque.FechaEmision;
            cboLocalidades.Text = new BLLLocalidad().TraerLocalidad(_cheque.IdLocalidad).Nombre;
            cboCuentasBancarias.Text = new BLLCuentaBancaria().Traer(_cheque.IdCuentaBancaria).Nombre;
            txtImporte.Text = _cheque.Importe.ToString();
            chkChequePropio.Checked = _cheque.EsPropio;

            if (_cheque.Firmante != null)
                txtFirmante.Text = _cheque.Firmante;

            txtCuitFirmante.Text = _cheque.CuitFirmante;
            cboEstados.Text = _cheque.Estado.ToString();
            dtpFechaAdquisicion.Value = _cheque.FechaAdquisicion;

            if (_cheque.FechaDeposito == null)
                dtpFechaDeposito.Checked = false;
            else
            {
                dtpFechaDeposito.Checked = true;
                dtpFechaDeposito.Value = _cheque.FechaDeposito.Value;
            }

            dtpFechaVencimiento.Value = _cheque.FechaVencimiento;
        }


        private void FrmCheque_Load(object sender, EventArgs e)
        {
            CargarLocalidades();
            CargarCuentasBancarias();
            CargarEstados();
            CargarDatosCheque();
            CargarObservaciones();   
        }

        private void btnABMLocalidad_Click(object sender, EventArgs e)
        {
            FrmLocalidad frmLocalidades = new FrmLocalidad();
            frmLocalidades.StartPosition = FormStartPosition.CenterScreen;
            frmLocalidades.ShowDialog();
            CargarLocalidades();
        }

        private void btnABMBancos_Click(object sender, EventArgs e)
        {
            FrmCuentaBancaria frmBancos = new FrmCuentaBancaria();
            frmBancos.StartPosition = FormStartPosition.CenterScreen;
            frmBancos.ShowDialog();
            CargarCuentasBancarias();
        }

        private void btnCancelar_Click(object sender, EventArgs e)
        {
            DialogResult = DialogResult.Cancel;
            Close();
        }

        private void btnGuardar_Click(object sender, EventArgs e)
        {
            if (ValidarDatos())
            {
                BLLCheque bll = new BLLCheque();
                _cheque.Numero = txtNro.Text;
                _cheque.FechaEmision = dtpFechaEmision.Value;
                _cheque.IdLocalidad = (cboLocalidades.SelectedItem as Localidad).IdLocalidad;
                _cheque.IdCuentaBancaria = (cboCuentasBancarias.SelectedItem as CuentaBancaria).IdCuentaBancaria;
                _cheque.Importe = decimal.Parse(txtImporte.Text);
                _cheque.EsPropio = chkChequePropio.Checked;
                _cheque.Firmante = txtFirmante.Text;

                _cheque.CuitFirmante = txtCuitFirmante.Text;
                _cheque.Estado = (ChequeEstado) cboEstados.SelectedIndex + 1;
                _cheque.FechaAdquisicion = dtpFechaAdquisicion.Value;

                if (dtpFechaDeposito.Checked)
                    _cheque.FechaDeposito = dtpFechaDeposito.Value;
                else
                    _cheque.FechaDeposito = null;

                _cheque.FechaVencimiento = dtpFechaVencimiento.Value;

                if (_esAlta)
                    bll.CargarCheque(_cheque, _observaciones);
                else
                    bll.ModificarCheque(_cheque, _observaciones);

                DialogResult = DialogResult.OK;
                Close();
            }
        }

        private void dgvObservaciones_SelectionChanged(object sender, EventArgs e)
        {
            btnRemover.Enabled = dgvObservaciones.SelectedRows.Count > 0;
        }

        private void btnAgregar_Click(object sender, EventArgs e)
        {
            ChequeObservacion observacion = new ChequeObservacion();
            observacion.Observacion = txtObservacion.Text;
            observacion.Fecha = dtpFechaObservacion.Value;

            _observaciones.Add(observacion);
            CargarObservaciones();
        }

        private void btnRemover_Click(object sender, EventArgs e)
        {
            _observaciones.RemoveAt(dgvObservaciones.SelectedRows[0].Index);
            CargarObservaciones();
        }

        private void dgvObservaciones_DataError(object sender, DataGridViewDataErrorEventArgs e)
        {
            //CONCHA PT AMADRE SIDOSA POR EL ORTO
        }
    }
}
